سفارش تبلیغ
صبا ویژن
مدیر وبلاگ
 
آمار واطلاعات
بازدید امروز : 8
بازدید دیروز : 0
کل بازدید : 1551
کل یادداشتها ها : 3
خبر مایه


اولین گام پردازش تصویر کار با رنگ نقاط (pixel) هستش. اما باید بگم توی حالت عادی شما 3 درجه رنگی از 3 رنگ اصلی آبی و سبز و قرمز برای هر نقطه دارید که با کم و زیاد شدن شدت هر مولفه اصلی رنگ حاصل تغییر میکنه . اما تو پردازش تصویر این فرمت اصلا به درد نمی خوره ! دلیلش اینه که شما معمولا نیاز به تشخیص یه محدوده رنگی خاص دارید مثلا رنگ حول و حوش صورتی, حالا با 3 رنگ اصلی چطور می خواید این محدوده رو تعیین کنید ؟! میشه گفت محاله ممکنه  یا بهتر بگم اصلا عقلانی نیست دنبالش برید.!!!

پس باید دنبال شیوه ای برای اون باشیم!

برای هر رنگ ما 3 مشخصه می تونیم نام ببریم :

1- نام رنگ (چیز بهتری گیر نیووردم بهش بگم -> Hue ) :

این یعنی اینکه رنگ چیه ! مثلا میگی آبی یا آبی یکم متمایل به سبز یا ....

2- شدت رنگ :

اگه دقت کرده باشید هر رنگ میتونه پر رنگ یا کم رنگ باشه اما ماهیت ذاتی اون یه چیزه و فقط کم رنگ تر یا پررنگ تر شده به این میگن -> Saturation

3- روشنایی یا تیرگی رنگ :

یه رنگ رو می تونید بهش نور بتابونید که روشناییش زیاد بشه یا نور رو کم کنید که روشناییش کم بشه که میتونه انقدر کم بشه که سیاه بشه !! به این میگن->Intensity

امیدوارم تونسته باشن خوب برسونم منظورم چیه !

پس یه حوضه جدید که الهام گرفته از چشم هستش رو باهاش آشنا شدیم که کار روی رنگها برای تصمیم گیری روی مشخصات اون رو راحت میکنه. به این حوضه رنگی اصطلاحا HSI میگن که مخفف اون 3کلمه بالاست. شکل زیر نمودار تغییرات رنگ رو با توجه به این 3 مولفه نشون میده:

H بین 0 تا 360 هستش یعنی از قرمز تا سبز 120 درجه و از سبز تا آبی 120درجه و از آبی تا قرمز 120 درجه در جهت خلاف جهت حرکت عقربه های ساعت.

S بین 0 تا 100 هستش که از کم رنگ (0) تا پر رنگ (100)

I از 0 تا 100 هستش یعنی از تاریک(0) تا روشن(100)

چند نمونه از رنگها در 2 حوضه مذکور :

 

رنگ

RGB مقادیر

HSI مقادیر

سیاه

(255,255,255)

(0,0,0)

سفید

(255,255,255)

(0,0,100)

قرمز

(255,0,0)

(0,100,100)

سبز

(0,255,0)

(120,100,100)

آبی

(0,0,255)

(240,100,100)

!  قهوه ای

(64,128,128)

(180,50,50)

حالا نیاز به این داریم که RGB مربوط به هر نقطه را به HSI تبدیل کنیم که رابطش رو به صورت سی نوشتم که r,g,b همون 3 رنگ آبی و سبز و قرمز هر نقطه هستش:

int min,max;

/////////////////////

if(r>g)

{

max=r;

min=g;

}

else

{

max=g;

min=r;

}

if(b>max)

max=b;

if(b<min )

 

min=b;

////////////////////

if(max==0)

{

i=0;

s=0;

h=0;

}

else

{

i=max*100/255;

s=(max-min)*100/max;

h=180*acos((((r-g)+(r-b))/2)/sqrt(pow(r-g,2)+(r-b)*(g-b)))/3.1415;

if(b>g)

h=360-h;

}






طراحی پوسته توسط تیم پارسی بلاگ